<template>
	<view>
		<view class="titi">
			<image class="im2" :src="srcTop()"></image>
		</view>
		<ly-tree :tree-data="treeData" :ready="ready" node-key="id" :defaultExpandedKeys="defaultExpandedKeys" :accordion="true"
		 @node-expand="handleNodeExpand" @node-click="handleNodeClick">
		</ly-tree>
	</view>

</template>

<script>
	import LyTree from '@/components/ly-tree/ly-tree.vue'
	export default {
		components: {
			LyTree
		},
		data() {
			return {
				ready: false, // 这里用于自主控制loading加载状态，避免异步正在加载数据的空档显示“暂无数据”
				treeData: [],
				defaultExpandedKeys: [1]
			};
		},

		methods: {
			// uni-app中emit触发的方法只能接受一个参数，所以会回传一个对象，打印对象即可见到其中的内容
			handleNodeClick(obj) {
				//console.log('handleNodeClick', JSON.stringify(obj));
			},
			handleNodeExpand(obj) {
				//console.log('handleNodeExpand', JSON.stringify(obj));
			},
			parseData: (array) => {
				let id = 1;
				let treeData = [];
				let [jxArray, dqArray, xzArray, jfArray, zyArray] = [
					[],
					[],
					[],
					[],
					[]
				];

				/**
				 * 循环遍历数据，给数据进行分类
				 */
				array.forEach(n => {
					switch (n.pid) {
						case 3:
							{
								jxArray.push(n);
								break;
							}
						case 69:
							{
								zyArray.push(n);
								break;
							}
						case 1:
							{
								dqArray.push(n);
								break;
							}
						case 2:
							{
								xzArray.push(n);
								break;
							}
						case 4:
							{
								jfArray.push(n);
								break;
							}
					}
				});



				/**
				 * 给节点添加教学部门的数据
				 */
				treeData.push({
					label: {
						text: '教学部门',
						style: `color:#000000;font-size:38rpx;font-weight: 600;`
					},
					id: id++,
					children: getJXChildern()
				})

				treeData.push({
					label: {
						text: '党群部门',
						style: `color:#000000;font-size:38rpx;font-weight: 600;`
					},
					id: id++,
					children: getChildren(dqArray)
				})
				treeData.push({
					label: {
						text: `行政部门`,
						style: `color:#000000;font-size:38rpx;font-weight: 600;`
					},
					id: id++,
					children: getChildren(xzArray)
				})
				treeData.push({
					label: {
						text: '教辅部门',
						style: `color:#000000;font-size:38rpx;font-weight: 600;`
					},
					id: id++,
					children: getChildren(jfArray)
				})
				treeData.push({
					label: {
						text: '其他部门',
						style: `color:#000000;font-size:38rpx;font-weight: 600;`
					},
					id: id++,
					children: getChildren(zyArray)
				})

				console.log(JSON.stringify(treeData))
				return treeData;


				/**
				 * 通过数组生成节点数据
				 * @param {Object} arr 节点数据
				 */
				function getChildren(arr) {
					let a = [];
					/**
					 * 循环遍历数组，将节点的信息添加到节点树中
					 */
					arr.forEach(n => {
						a.push(...getInfo({
							text: n.name,
							style: `font-weight: 700;color:#313131;`
						}, n.year, n.certifiedNum));
					});
					/* // 去除最后一列空节点
					a.length=a.length>0?a.length-1:a.length; */
					return a;
				}


				/**
				 * 生成教学部门的节点
				 */
				function getJXChildern() {
					let a = [];
					/**
					 * 对教学部门(学院)的列表进行循环遍历，并将这个学院的信息和子部门(包含的专业)，添加到节点树中。
					 */
					jxArray.forEach(n => {
						a.push(...getInfo({
							text: n.name,
							style: `font-weight: 700;color:#313131;`
						}, n.year, n.certifiedNum, n.subCount));
						if (n.subCount > 0) {
							a.push({
								label: {
									text: `${n.name}子部门`,
									style: 'margin-left:-4px;color:#a2a2a2;'
								},
								id: id++,
								children: f(n.id)
							})
						}

					})
					return a;
				}

				/**
				 * 生成教学部门学院的子节点
				 * @param {Number} parentId 专业的父节点(学院)
				 */
				function f(parentId) {
					let a = [];
					/**
					 * 对专业的列表进行循环遍历，查找当前父节点为当前学院编号的专业添加到数组
					 */
					zyArray.forEach(n => {
						if (n.parentId === parentId) {
							a.push(...getInfo({
								text: n.name,
								style: `font-weight: :600;color:#636363;`
							}, 
							// {
							// 	text: n.year,
							// 	style: `font-weight: :600;color:#a2a2a2;`
							// }, 
							{
								text: n.certifiedNum,
								style: `font-weight: :600;color:#a2a2a2;`
							}))
						}
					})
					/* // 去除最后一列空节点
					a.length=a.length>0?a.length-1:a.length; */
					return a;
				}

				/**
				 * @param {String or Object} name 部门名称 string 或者 object 如果是 string 直接默认样式 ，如果是object 则为以下格式：{text:'',style:''}
				 * @param {String or Object} year 创建年份 string 或者 object 如果是 string 直接默认样式 ，如果是object 则为以下格式：{text:'',style:''}
				 * @param {String or Object} count 行政部门 string 或者 object 如果是 string 直接默认样式 ，如果是object 则为以下格式：{text:'',style:''}
				 * @param {String or Object} childDept 子部门数量 可以没有这个参数 若没有这个参数返回数组这列为空 如果有参数：(string 或者 object 如果是 string 直接默认样式 ，如果是object 则为以下格式：{text:'',style:''})
				 */
				function getInfo(name, year, count, childDept) {
					let n = [{
							id: id++,
							label: {
								text: `部门名称：${typeof name.text!=="undefined"?name.text:name}`,
								style: `${typeof name.style!=="undefined"?`margin-left:-38rpx;${name.style}`:`margin-left:-38rpx;`}`
							},
						},
						// {
						// 	id: id++,
						// 	label: {
						// 		text: `创建年份：${typeof year.text!=="undefined"?year.text:year}`,
						// 		style: `${typeof year.style!=="undefined"?`margin-left:-38rpx;${year.style}`:`margin-left:-38rpx;`}`
						// 	},
						// },
						// {
						// 	id: id++,
						// 	label: {
						// 		text: `认证人数：${typeof count.text!=="undefined"?count.text:count}`,
						// 		style: `${typeof count.style!=="undefined"?`margin-left:-38rpx;${count.style}`:`margin-left:-38rpx;`}`
						// 	}
						// }
					];
					// if (childDept !== undefined && childDept !== null && childDept !== "") {
					// 	n.push({
					// 		id: id++,
					// 		label: {
					// 			text: `子部门数：${typeof childDept.text!=="undefined"?childDept.text:childDept}`,
					// 			style: `${typeof childDept.style!=="undefined"?`margin-left:-38rpx;${childDept.style}`:`margin-left:-38rpx;`}`
					// 		}
					// 	})
					// }
					/* else {
						n.push({
							label: {text:'---------------------------------------------',style:`margin-left:-45rpx;`}
						})
					} */
					return n;
				}

			},
			srcTop: function() {
				return getApp().globalData.Link + 'file/system/top.jpg';
			}
		},
		onLoad() {
			uni.request({
					url: getApp().globalData.URL + "dept/all",
					method: 'GET'
				})
				.then(data => { //data为一个数组，数组第一项为错误信息，第二项为返回数据
					var [error, res] = data;

					this.treeData = this.parseData(res.data);

					this.ready = true;
				})
		},

	}
</script>


<style>
	.im2 {
		width: 100%;
		height: 150rpx;
	}
</style>
